/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package restauranteaplicacion.Ingresos;

import Clases.Observador;
import javax.swing.JTextField;
import entidad.Producto;
import entidad.Proveedores;
import CapaNegocios.CNProducto;
import CapaNegocios.CNOrdenSalida;
import CapaNegocios.CNUnidadMedida;
import entidad.Detalleordensalida;
import entidad.Unidaddemedida;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import Clases.ComboBox;
import entidad.Ordensalida;
import java.awt.Component;
import java.util.Observable;
import java.util.Observer;
import restauranteaplicacion.MDI;
import CapaNegocios.Conversor;
import java.util.Calendar;
import restauranteaplicacion.Modificaciones.ModificacionOrdenSalidas;
/**
 *
 * @author Victor
 */
public final class IngresoOrdenSalida extends javax.swing.JInternalFrame  implements Observer{

    /**
     * Creates new form IngresoEmpleado
     */
    Observador obs;
    Observador obsPadre;
    DefaultTableModel modelo;
    List<Detalleordensalida> listaDetalle;
    List<Detalleordensalida>listaEliminados;
    public IngresoOrdenSalida() {
        initComponents();
        obs=new Observador();
        obs.addObserver(this);
        modelo = (DefaultTableModel) Tabla.getModel();
        listaDetalle = new ArrayList<>();
        obsPadre=null;
        ordensalida1 = null;
        cargarUnidadMedida();
        listaEliminados=null;
        dateFechaOrden.setDate(Calendar.getInstance().getTime());
    }
    public void cargarUnidadMedida()
    {
        List<Unidaddemedida> lista = CNUnidadMedida.buscarTodos();
        cmbUnidadMedida.removeAllItems();
        
        for(Unidaddemedida lis : lista)
        {
            cmbUnidadMedida.addItem(new ComboBox(lis.getIdUnidadDeMedida(),lis.getNombre()));
        }
    }
    
    
    
    public void cargarUnidadMedidaConParametro(String parametro)
    {
        List<Unidaddemedida> lista = CNUnidadMedida.buscarTipo(parametro);
        cmbUnidadMedida.removeAllItems();
        
        for(Unidaddemedida lis : lista)
        {
            cmbUnidadMedida.addItem(new ComboBox(lis.getIdUnidadDeMedida(),lis.getNombre()));
        }
    }
    
    public  IngresoOrdenSalida(Observador ob)
    {
        initComponents();
        obsPadre=ob;
        obs=new Observador();
        obs.addObserver(this);
        modelo = (DefaultTableModel) Tabla.getModel();
        listaDetalle = new ArrayList<>();
        ordensalida1 = null;
        cargarUnidadMedida();
        listaEliminados=null;
        dateFechaOrden.setDate(Calendar.getInstance().getTime());
    }
    
    public  IngresoOrdenSalida(Observador ob, Ordensalida orden)
    {
        initComponents();
        //ordensalida1= new Ordensalida();
        obsPadre=ob;
        obs=new Observador();
        obs.addObserver(this);
        modelo = (DefaultTableModel) Tabla.getModel();
        listaDetalle = new ArrayList<>();
        cargarUnidadMedida();
        cargarOrde(ordensalida1,orden);
        cargarLotes();
        txtNoOrden.setEnabled(false);
        dateFechaOrden.setDate(ordensalida1.getFecha());
        listaEliminados= new ArrayList<>();
    }

    public void cargarOrde(Ordensalida viejo, Ordensalida or)
    {
        viejo.setActivo(or.getActivo());
        viejo.setDescripcion(or.getDescripcion());
        viejo.setDetalleordensalidaCollection(or.getDetalleordensalidaCollection());
        viejo.setNoOrden(or.getNoOrden());
        viejo.setFecha(or.getFecha());
        viejo.setIdOrdenSalida(or.getIdOrdenSalida());        
    }
    
    public void cargarLotes()
    {
        //modelo.addRow(new Object[]{producto.getNombre(),producto.getDescripcion(),cantidad,precioUnitario, precio});
        if(ordensalida1.getDetalleordensalidaCollection()!=null)
        {
            ClearTable();
            for (Detalleordensalida lot : ordensalida1.getDetalleordensalidaCollection()) {
                Producto producto = lot.getProductoidProducto();
                modelo.addRow(new Object[]{producto.getNombre(),producto.getDescripcion(),producto.getUnidadDeMedidaidUnidadDeMedida()
                        .getNombre(),producto.getCanitdad()+lot.getCantidad(),lot.getCantidad(),producto.getCanitdad()});
                listaDetalle.add(lot);
            }
        }
    }
    

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        ordensalida1 = new entidad.Ordensalida();
        jPanel1 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        jPanel4 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        btnCancelar = new javax.swing.JButton();
        jLabel19 = new javax.swing.JLabel();
        jLayeredPane1 = new javax.swing.JLayeredPane();
        jLabel20 = new javax.swing.JLabel();
        txtNoOrden = new javax.swing.JTextField();
        jLabel25 = new javax.swing.JLabel();
        jLabel26 = new javax.swing.JLabel();
        dateFechaOrden = new com.toedter.calendar.JDateChooser();
        jScrollPane2 = new javax.swing.JScrollPane();
        txtDescripcionOrden = new javax.swing.JTextArea();
        btnGuardar = new javax.swing.JButton();
        jLayeredPane2 = new javax.swing.JLayeredPane();
        jLabel28 = new javax.swing.JLabel();
        txtNombreProducto = new javax.swing.JTextField();
        jLabel29 = new javax.swing.JLabel();
        cmbNombreProducto = new javax.swing.JComboBox();
        txtDescripcion = new javax.swing.JTextField();
        jLabel30 = new javax.swing.JLabel();
        jLabel31 = new javax.swing.JLabel();
        txtCantidad = new javax.swing.JTextField();
        jLabel32 = new javax.swing.JLabel();
        txtDescripcionDetalle = new javax.swing.JTextField();
        dateVencimiento = new com.toedter.calendar.JDateChooser();
        jButton2 = new javax.swing.JButton();
        cmbUnidadMedida = new javax.swing.JComboBox();
        jLabel34 = new javax.swing.JLabel();
        jLabel35 = new javax.swing.JLabel();
        jLabel21 = new javax.swing.JLabel();
        jLayeredPane3 = new javax.swing.JLayeredPane();
        jScrollPane1 = new javax.swing.JScrollPane();
        Tabla = new javax.swing.JTable();
        btnEliminar = new javax.swing.JButton();
        btnAgregar = new javax.swing.JButton();

        ordensalida1.setActivo(true);

        setBackground(new java.awt.Color(255, 255, 255));
        setClosable(true);
        setIconifiable(true);
        setTitle("Creacion de Compras");
        setAutoscrolls(true);
        setMaximumSize(new java.awt.Dimension(1045, 649));
        setMinimumSize(new java.awt.Dimension(1000, 520));
        setPreferredSize(new java.awt.Dimension(1045, 649));
        addInternalFrameListener(new javax.swing.event.InternalFrameListener() {
            public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) {
                formInternalFrameClosing(evt);
            }
            public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) {
            }
        });
        getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.PAGE_AXIS));

        jPanel1.setBackground(new java.awt.Color(54, 149, 240));
        jPanel1.setMaximumSize(new java.awt.Dimension(2000, 50));
        jPanel1.setMinimumSize(new java.awt.Dimension(246, 50));
        jPanel1.setPreferredSize(new java.awt.Dimension(1000, 50));

        jLabel4.setFont(new java.awt.Font("Arial", 1, 24)); // NOI18N
        jLabel4.setForeground(new java.awt.Color(255, 255, 255));
        jLabel4.setText("Orden de Salida");
        jPanel1.add(jLabel4);

        getContentPane().add(jPanel1);

        jPanel4.setPreferredSize(new java.awt.Dimension(988, 430));

        jPanel2.setBackground(new java.awt.Color(255, 255, 255));
        jPanel2.setPreferredSize(new java.awt.Dimension(494, 500));

        btnCancelar.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N
        btnCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restauranteaplicacion/Ingresos/circle-x-3x.png"))); // NOI18N
        btnCancelar.setText("Salir");
        btnCancelar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnCancelar.setPreferredSize(new java.awt.Dimension(85, 53));
        btnCancelar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        jLabel19.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N
        jLabel19.setText("INFORMACION DE LA ORDEN");

        jLayeredPane1.setBorder(javax.swing.BorderFactory.createTitledBorder(""));

        jLabel20.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        jLabel20.setText("No Orden");
        jLayeredPane1.add(jLabel20);
        jLabel20.setBounds(10, 20, 60, 15);

        txtNoOrden.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N

        org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, ordensalida1, org.jdesktop.beansbinding.ELProperty.create("${noOrden}"), txtNoOrden, org.jdesktop.beansbinding.BeanProperty.create("text"));
        bindingGroup.addBinding(binding);

        jLayeredPane1.add(txtNoOrden);
        txtNoOrden.setBounds(70, 10, 170, 30);

        jLabel25.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        jLabel25.setText("Fecha");
        jLayeredPane1.add(jLabel25);
        jLabel25.setBounds(10, 60, 50, 15);

        jLabel26.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        jLabel26.setText("<html>Descripcion</html>");
        jLayeredPane1.add(jLabel26);
        jLabel26.setBounds(270, 20, 100, 15);
        jLayeredPane1.add(dateFechaOrden);
        dateFechaOrden.setBounds(70, 50, 170, 30);

        txtDescripcionOrden.setColumns(20);
        txtDescripcionOrden.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        txtDescripcionOrden.setRows(2);

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, ordensalida1, org.jdesktop.beansbinding.ELProperty.create("${descripcion}"), txtDescripcionOrden, org.jdesktop.beansbinding.BeanProperty.create("text"));
        bindingGroup.addBinding(binding);

        txtDescripcionOrden.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtDescripcionOrdenKeyPressed(evt);
            }
        });
        jScrollPane2.setViewportView(txtDescripcionOrden);

        jLayeredPane1.add(jScrollPane2);
        jScrollPane2.setBounds(390, 10, 440, 70);

        btnGuardar.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N
        btnGuardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/circle-check-3x.png"))); // NOI18N
        btnGuardar.setText("Guardar");
        btnGuardar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnGuardar.setNextFocusableComponent(btnCancelar);
        btnGuardar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarActionPerformed(evt);
            }
        });

        jLayeredPane2.setBorder(javax.swing.BorderFactory.createTitledBorder(""));

        jLabel28.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        jLabel28.setText("Nombre");
        jLayeredPane2.add(jLabel28);
        jLabel28.setBounds(10, 20, 50, 15);

        txtNombreProducto.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N
        txtNombreProducto.setNextFocusableComponent(cmbNombreProducto);
        txtNombreProducto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtNombreProductoActionPerformed(evt);
            }
        });
        txtNombreProducto.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtNombreProductoKeyTyped(evt);
            }
        });
        jLayeredPane2.add(txtNombreProducto);
        txtNombreProducto.setBounds(60, 13, 170, 30);

        jLabel29.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        jLabel29.setText("<html>Seleccione el Nombre</html>");
        jLayeredPane2.add(jLabel29);
        jLabel29.setBounds(290, 10, 130, 30);

        cmbNombreProducto.setNextFocusableComponent(txtCantidad);
        cmbNombreProducto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbNombreProductoActionPerformed(evt);
            }
        });
        cmbNombreProducto.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                cmbNombreProductoKeyTyped(evt);
            }
        });
        jLayeredPane2.add(cmbNombreProducto);
        cmbNombreProducto.setBounds(420, 10, 180, 30);

        txtDescripcion.setEditable(false);
        txtDescripcion.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N
        jLayeredPane2.add(txtDescripcion);
        txtDescripcion.setBounds(680, 13, 290, 30);

        jLabel30.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        jLabel30.setText("Descripcion");
        jLayeredPane2.add(jLabel30);
        jLabel30.setBounds(610, 20, 80, 15);

        jLabel31.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        jLabel31.setText("<html>Cantidad  consumida</html>");
        jLayeredPane2.add(jLabel31);
        jLabel31.setBounds(10, 50, 70, 50);

        txtCantidad.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N
        txtCantidad.setNextFocusableComponent(cmbUnidadMedida);
        txtCantidad.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtCantidadKeyTyped(evt);
            }
        });
        jLayeredPane2.add(txtCantidad);
        txtCantidad.setBounds(80, 60, 80, 30);

        jLabel32.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        jLabel32.setText("<html>Unidad de Medida</html>");
        jLayeredPane2.add(jLabel32);
        jLabel32.setBounds(170, 50, 70, 40);

        txtDescripcionDetalle.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N
        jLayeredPane2.add(txtDescripcionDetalle);
        txtDescripcionDetalle.setBounds(460, 60, 280, 40);

        dateVencimiento.setMinSelectableDate(Calendar.getInstance().getTime());
        jLayeredPane2.add(dateVencimiento);
        dateVencimiento.setBounds(800, 60, 160, 30);

        jButton2.setBackground(new java.awt.Color(255, 255, 255));
        jButton2.setForeground(new java.awt.Color(102, 102, 255));
        jButton2.setText("+");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        jLayeredPane2.add(jButton2);
        jButton2.setBounds(240, 10, 40, 30);

        cmbUnidadMedida.setNextFocusableComponent(txtDescripcionDetalle);
        cmbUnidadMedida.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbUnidadMedidaActionPerformed(evt);
            }
        });
        jLayeredPane2.add(cmbUnidadMedida);
        cmbUnidadMedida.setBounds(240, 60, 140, 30);

        jLabel34.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        jLabel34.setText("Fecha");
        jLayeredPane2.add(jLabel34);
        jLabel34.setBounds(750, 60, 60, 40);

        jLabel35.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        jLabel35.setText("<html>Descripcion</html>");
        jLayeredPane2.add(jLabel35);
        jLabel35.setBounds(380, 60, 70, 40);

        jLabel21.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N
        jLabel21.setText("DETALLE DE LA ORDEN DE SALIDA");

        jLayeredPane3.setBorder(javax.swing.BorderFactory.createTitledBorder(""));

        Tabla.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
        Tabla.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Nombre Producto", "Descripcion", "<html>Unidad de Medida</html>", "<html>Cantidad del Producto</html>", "<html>Cantidad a Descontar</html>", "<html>Cantidad del producto Final</html>"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.Object.class, java.lang.Float.class, java.lang.Float.class, java.lang.Float.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        Tabla.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                TablaMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(Tabla);
        if (Tabla.getColumnModel().getColumnCount() > 0) {
            Tabla.getColumnModel().getColumn(0).setResizable(false);
            Tabla.getColumnModel().getColumn(0).setPreferredWidth(100);
            Tabla.getColumnModel().getColumn(1).setResizable(false);
            Tabla.getColumnModel().getColumn(2).setResizable(false);
            Tabla.getColumnModel().getColumn(2).setPreferredWidth(90);
            Tabla.getColumnModel().getColumn(3).setResizable(false);
            Tabla.getColumnModel().getColumn(3).setPreferredWidth(120);
            Tabla.getColumnModel().getColumn(4).setResizable(false);
            Tabla.getColumnModel().getColumn(4).setPreferredWidth(120);
            Tabla.getColumnModel().getColumn(5).setResizable(false);
            Tabla.getColumnModel().getColumn(5).setPreferredWidth(120);
        }

        jLayeredPane3.add(jScrollPane1);
        jScrollPane1.setBounds(10, 20, 860, 140);

        btnEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/restauranteaplicacion/Ingresos/x-3x.png"))); // NOI18N
        btnEliminar.setText("Eliminar");
        btnEliminar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnEliminar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });
        jLayeredPane3.add(btnEliminar);
        btnEliminar.setBounds(880, 100, 80, 60);

        btnAgregar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/plus-3x.png"))); // NOI18N
        btnAgregar.setText("Agregar");
        btnAgregar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnAgregar.setNextFocusableComponent(txtNombreProducto);
        btnAgregar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnAgregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarActionPerformed(evt);
            }
        });
        jLayeredPane3.add(btnAgregar);
        btnAgregar.setBounds(880, 20, 80, 60);

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addGap(24, 24, 24)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jLayeredPane3)
                    .addComponent(jLabel21)
                    .addComponent(jLabel19)
                    .addComponent(jLayeredPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 982, Short.MAX_VALUE)
                    .addComponent(jLayeredPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 982, Short.MAX_VALUE))
                .addContainerGap(23, Short.MAX_VALUE))
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addGap(50, 50, 50)
                .addComponent(btnCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(btnGuardar)
                .addGap(46, 46, 46))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addGap(23, 23, 23)
                .addComponent(jLabel19)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLayeredPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel21)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLayeredPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLayeredPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 172, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(btnCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnGuardar))
                .addGap(49, 49, 49))
        );

        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 1029, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 569, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );

        getContentPane().add(jPanel4);

        getAccessibleContext().setAccessibleName("Orden de Salida");

        bindingGroup.bind();

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGuardarActionPerformed
        // TODO add your handling code here:
        if(listaDetalle.size()>=1)
        {
            if(ordensalida1!=null)
            {
                //ordensalida1.setDescripcion(txtDescripcionOrden.getText());
                ordensalida1.setFecha(dateFechaOrden.getDate());
                ordensalida1.setDetalleordensalidaCollection(listaDetalle);
                if(CNOrdenSalida.modificar(ordensalida1,listaEliminados)){
                    JOptionPane.showMessageDialog(this, "Se ha Modificado correctamente", 
                    "Informacion", JOptionPane.INFORMATION_MESSAGE);
                    cargarOrde(ModificacionOrdenSalidas.ordensalida1,ordensalida1);
                    obsPadre.actualizar();
                    this.setVisible(false);
                }
                else
                    JOptionPane.showMessageDialog(this, "No Se ha Modifico correctamente",
                                 "Error", JOptionPane.ERROR_MESSAGE);
            }       
            else
            {
                Ordensalida temp = new Ordensalida();
                temp.setDescripcion(txtDescripcionOrden.getText());
                temp.setFecha(dateFechaOrden.getDate());
                temp.setDetalleordensalidaCollection(listaDetalle);
                temp.setNoOrden(txtNoOrden.getText());
                    if(CNOrdenSalida.insertar(temp))
                    {
                        JOptionPane.showMessageDialog(this, "Se ha guardado correctamente", "Informacion", JOptionPane.INFORMATION_MESSAGE);
                        limpiar();
                    }
                    else
                         JOptionPane.showMessageDialog(this, "No Se ha guardado correctamente",
                                 "Error", JOptionPane.ERROR_MESSAGE);
            }
               
        }
        else
            JOptionPane.showMessageDialog(this, "No se han agregado Productos", "Informacion", JOptionPane.INFORMATION_MESSAGE);
        
    }//GEN-LAST:event_btnGuardarActionPerformed

    private void limpiar()
    {
        cmbNombreProducto.removeAllItems();
        txtCantidad.setText("");
        txtDescripcionOrden.setText("");
        txtDescripcionOrden.setText("");
        txtNoOrden.setText("");
        txtDescripcionDetalle.setText("");
        txtNoOrden.setText("");
        dateFechaOrden.setDate(null);
        limpiarDetalle();
        ClearTable();   
        txtNoOrden.requestFocus(true);
    }
    
    private void ClearTable(){
        for (int i = 0; i < Tabla.getRowCount(); i++) {
            modelo.removeRow(i);
            i-=1;
        }
    }
    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        
        if(obs!=null)
            obs.actualizar();
        if(obsPadre != null)
            obsPadre.actualizar();
        this.setVisible(false);
        // TODO add your handling code here:
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void cmbNombreProductoKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbNombreProductoKeyTyped
        // TODO add your handling code here:
        
    }//GEN-LAST:event_cmbNombreProductoKeyTyped

    private void cmbNombreProductoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbNombreProductoActionPerformed
        // TODO add your handling code here:
        if((cmbNombreProducto.getSelectedItem()!=null)&&(comboNombre==false))
        {
            ComboBox h = (ComboBox)cmbNombreProducto.getSelectedItem();
            Producto producto = CNProducto.buscarId(h.getId());
            txtDescripcion.setText(producto.getNombre() +" Medido en: " + producto.getUnidadDeMedidaidUnidadDeMedida().getNombre() );
            cargarUnidadMedidaConParametro(producto.getUnidadDeMedidaidUnidadDeMedida().getTipo());
        }
        
    }//GEN-LAST:event_cmbNombreProductoActionPerformed
    boolean comboNombre=false;
    private void txtNombreProductoKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNombreProductoKeyTyped
        // TODO add your handling code here:
        limpiarProduct();
        if(txtNombreProducto.getText().length()>=2)
        {
            List<Producto> lista = CNProducto.buscarNombre(txtNombreProducto.getText());
            boolean x=true;
            for(Producto pro : lista)
            {
                x=false;
                cmbNombreProducto.addItem(new ComboBox(pro.getIdProducto(),pro.getNombre()));
            }
            comboNombre=false;
            if(x)
            {
                limpiarProduct();
                comboNombre=true;
            }
        }
        else
            limpiarProduct();
    }//GEN-LAST:event_txtNombreProductoKeyTyped

    private void TablaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_TablaMouseClicked
        /*/ TODO add your handling code here:
        int fila = Tabla.rowAtPoint(evt.getPoint());
        if (fila > -1)     
            txtNombre.setText(String.valueOf(Tabla.getValueAt(fila, 1)));
        else
            txtNombre.setText("hola");*/

    }//GEN-LAST:event_TablaMouseClicked

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        // TODO add your handling code here:
        int fila = Tabla.getSelectedRow();
        if (fila > -1)   
        {
            modelo.removeRow(fila);
            if(listaEliminados!=null)
                listaEliminados.add(listaDetalle.get(fila));
            listaDetalle.remove(fila);
        }
        else
            JOptionPane.showMessageDialog(this, "Debe Seleccionar un  Elemento", "Error", JOptionPane.INFORMATION_MESSAGE);
    }//GEN-LAST:event_btnEliminarActionPerformed
boolean comboProducto;
    private void txtNombreProductoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtNombreProductoActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_txtNombreProductoActionPerformed

    
    
    private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarActionPerformed
        // TODO add your handling code here:   
        if(cmbNombreProducto.getModel().getSize()!=-1 && comboNombre ==false && !"".equals(txtCantidad.getText()))
        {
             ComboBox combo = (ComboBox) cmbNombreProducto.getSelectedItem();
             ComboBox combo2 = (ComboBox) cmbUnidadMedida.getSelectedItem();
             Producto producto = CNProducto.buscarId(combo.getId());
             Unidaddemedida unidad = CNUnidadMedida.buscarId(combo2.getId());
             float cantidad = Float.valueOf(txtCantidad.getText());
             cantidad = Conversor.convertirProducto(producto.getUnidadDeMedidaidUnidadDeMedida(), unidad, cantidad);
             float cantidadTotal=producto.getCanitdad() - cantidad;
            modelo.addRow(new Object[]{producto.getNombre(),txtDescripcionDetalle.getText(),producto.getUnidadDeMedidaidUnidadDeMedida().getNombre(),producto.getCanitdad(),
                cantidad,cantidadTotal,});
            Detalleordensalida detalle = new Detalleordensalida();
            detalle.setCantidad(cantidad);
            detalle.setDescripcion(txtDescripcionDetalle.getText());
            producto.setCanitdad(cantidadTotal);
            detalle.setProductoidProducto(producto);;
            detalle.setActivo(true);
            listaDetalle.add(detalle);
            txtNombreProducto.requestFocus(true);
            limpiarDetalle();
        }
    }//GEN-LAST:event_btnAgregarActionPerformed

    private void limpiarDetalle()
    {
        cmbNombreProducto.removeAllItems();
        txtDescripcion.setText("");
        txtNombreProducto.setText("");
        txtDescripcionDetalle.setText("");
        txtCantidad.setText("");
        dateVencimiento.setDate(null);
        txtNombreProducto.requestFocus(true);
    }
    
    private void txtCantidadKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCantidadKeyTyped
        // TODO add your handling code here:
        char c=evt.getKeyChar();  
        if((!Character.isDigit(c))&&(c != '.')) { 
              getToolkit().beep();                
              evt.consume(); 
          }
    }//GEN-LAST:event_txtCantidadKeyTyped

    private void cmbUnidadMedidaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbUnidadMedidaActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_cmbUnidadMedidaActionPerformed

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        // TODO add your handling code here:
        IngresoProducto ing = new IngresoProducto(obs);
        MDI.getDesktopPane().add(ing);
        ing.show();
        this.Desactivar();
    }//GEN-LAST:event_jButton2ActionPerformed

    private void formInternalFrameClosing(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameClosing
        // TODO add your handling code here:
        if(obs!=null)
            obs.actualizar();
        if(obsPadre != null)
            obsPadre.actualizar();
    }//GEN-LAST:event_formInternalFrameClosing

    private void txtDescripcionOrdenKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtDescripcionOrdenKeyPressed
        // TODO add your handling code here:
        int x = evt.getKeyCode();
        if(x==9){               
              evt.consume();
               txtNombreProducto.requestFocus(true);
          }
    }//GEN-LAST:event_txtDescripcionOrdenKeyPressed

    private void limpiarProduct()
    {
        cmbNombreProducto.removeAllItems();
        txtDescripcion.setText("");
    }
    
     private void Desactivar()
    {
        for(Component x :this.jPanel2.getComponents())
            x.setEnabled(false);
        for(Component x : this.jLayeredPane1.getComponents())
            x.setEnabled(false);
        for(Component x : this.jLayeredPane2.getComponents())
            x.setEnabled(false);
        for(Component x : this.jLayeredPane3.getComponents())
            x.setEnabled(false);
    }
    private void Activar()
    {
        for(Component x :this.jPanel2.getComponents())
            x.setEnabled(true);
        for(Component x : this.jLayeredPane1.getComponents())
            x.setEnabled(true);
        for(Component x : this.jLayeredPane2.getComponents())
            x.setEnabled(true);
        for(Component x : this.jLayeredPane3.getComponents())
            x.setEnabled(true);
        
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTable Tabla;
    private javax.swing.JButton btnAgregar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnGuardar;
    private javax.swing.JComboBox cmbNombreProducto;
    private javax.swing.JComboBox cmbUnidadMedida;
    private com.toedter.calendar.JDateChooser dateFechaOrden;
    private com.toedter.calendar.JDateChooser dateVencimiento;
    private javax.swing.JButton jButton2;
    private javax.swing.JLabel jLabel19;
    private javax.swing.JLabel jLabel20;
    private javax.swing.JLabel jLabel21;
    private javax.swing.JLabel jLabel25;
    private javax.swing.JLabel jLabel26;
    private javax.swing.JLabel jLabel28;
    private javax.swing.JLabel jLabel29;
    private javax.swing.JLabel jLabel30;
    private javax.swing.JLabel jLabel31;
    private javax.swing.JLabel jLabel32;
    private javax.swing.JLabel jLabel34;
    private javax.swing.JLabel jLabel35;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLayeredPane jLayeredPane1;
    private javax.swing.JLayeredPane jLayeredPane2;
    private javax.swing.JLayeredPane jLayeredPane3;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private entidad.Ordensalida ordensalida1;
    private javax.swing.JTextField txtCantidad;
    private javax.swing.JTextField txtDescripcion;
    private javax.swing.JTextField txtDescripcionDetalle;
    private javax.swing.JTextArea txtDescripcionOrden;
    private javax.swing.JTextField txtNoOrden;
    private javax.swing.JTextField txtNombreProducto;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration//GEN-END:variables

    @Override
    public void update(Observable o, Object arg) {
        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        Activar();
    }
}
